#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e6 + 5;
int arr[maxn];
int prefix[maxn];
int flags[maxn]; // 用来表示  i 这个位置的数字是否已经被 使用过

void solve(){
	int n;
	cin >> n;
	int idx = 0;
	int mx = 0;
	// 第一个一定是 最大值
	for (int i=1;i<=n;i++) {
		cin >> arr[i];
		if (arr[i] > mx) {
			mx = arr[i];
			idx = i;
		}
	}
	cout << mx << ' ';
	prefix[1] = mx;
	flags[idx] = 1;
	// 接下来进行遍历开始找
	for (int i=2;i<=n;i++) {
		int mxx = prefix[i-1];
		int p = 0;
		// 找下一个位置的数
		for (int j=1;j<=n;j++) {
			if (flags[j]) {
				// 使用过了
				continue;
			}
			if ((arr[j] | prefix[i-1]) > mxx) {
				mxx = arr[j] | prefix[i-1];
				// 记录一下位置
				p = j;
			}
		}
		// 使用这个位置
		if (p == 0) {
			// 没有找到, 直接退出
			break;
		}
		prefix[i] = prefix[i-1] | arr[p];
		cout << arr[p] << ' ';
		flags[p] = 1;
	}
	// 接下来打印没有使用的
	for (int i=1;i<=n;i++) {
		if (!flags[i]) {
			// 没有使用过
			cout << arr[i] << ' ';
		}
	}
}


signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int t;
	t=1;
	while(t--){
		solve();
	}
	return 0;
}
